package com.sjx.sjxlibrary.log;

public abstract class HiLogConfig {

    /* 打印日志允许每行最大字符数 */
    static int MAX_LEN = 512;

    /* 饿汉式
    *  优点：类加载的时候创建一次实例，避免了多线程的同步问题
    *  缺点：即使单例没被用到，也会被创建，浪费内存
    *  */
    private static HiThreadFormatter HI_THREAD_FORMATTER = new HiThreadFormatter();
    private static HiStackTraceFormatter HI_STACKTRACE_FORMATTER = new HiStackTraceFormatter();

    public static HiThreadFormatter getHiThreadFormatter() {
        return HI_THREAD_FORMATTER;
    }

    public static HiStackTraceFormatter getHiStackTraceFormatter() {
        return HI_STACKTRACE_FORMATTER;
    }

    /**
     * 由子类来提供解析json对象的方式，不写死GSON
     */
    public JsonParser injectJsonParser() {
        return null;
    }

    /**
     * 全局的默认TAG
     */
    public String getGlobalTag() {
        return "HiLog";
    }

    /**
     * 是否开启日志打印
     */
    public boolean enable() {
        return true;
    }

    /**
     * 是否要打印日志的信息
     */
    public boolean includeThread() {
        return true;
    }

    public interface JsonParser {
        String toJson(Object src);
    }

    /**
     * 由于错误线程的堆栈信息往往很深，而实际对于问题的排查只要前几行即可，所以这里用来定义堆栈要打印的深度
     */
    public int stackTraceDepth() {
        return 5;
    }

    /**
     * 打印器的设置：如控制台打印、文件打印、可视化打印......
     */
    public HiLogPrinter[] printers() {
        return null;
    }

}
